package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-10-27 08:32
 * @description: Functions of this class is 关键是不允许重复了！
 * 官方解法：
 * class Solution {
 *     boolean[] vis;
 *
 *     public List<List<Integer>> permuteUnique(int[] nums) {
 *         List<List<Integer>> ans = new ArrayList<List<Integer>>();
 *         List<Integer> perm = new ArrayList<Integer>();
 *         vis = new boolean[nums.length];
 *         Arrays.sort(nums);
 *         backtrack(nums, ans, 0, perm);
 *         return ans;
 *     }
 *
 *     public void backtrack(int[] nums, List<List<Integer>> ans, int idx, List<Integer> perm) {
 *         if (idx == nums.length) {
 *             ans.add(new ArrayList<Integer>(perm));这里要使用一个新的集合，然后将之前添加好的复制一份放到答案集合中
 *             return;
 *         }
 *         for (int i = 0; i < nums.length; ++i) {
 *             if (vis[i] || (i > 0 && nums[i] == nums[i - 1] && !vis[i - 1])) {
 *                 continue;
 *             }
 *             perm.add(nums[i]);
 *             vis[i] = true;
 *             backtrack(nums, ans, idx + 1, perm);
 *             vis[i] = false;
 *             perm.remove(idx);关键看这里，不是用i作为删除索引，而是使用上一次会退回来的使用的index
 *         }
 *     }
 * }

 **/
public class No全排列II {
}